# [Cpp] ๊ฐ์ ํจ์(Virtual function)
C++์์ ์์ ํด๋์ค์์ ์ฌ์ ์(์ค๋ฒ๋ผ์ด๋ฉ)ํ ๊ฒ์ผ๋ก ๊ธฐ๋ํ๋ ๋ฉค๋ฒ ํจ์๋ฅผ ์๋ฏธํจ
๋ฉค๋ฒ ํจ์ ์์
virtual
ํค์๋๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ธํจ โ ์คํ์๊ฐ์ ํจ์์ ๋คํ์ฑ์ ๊ตฌํํ ๋ ์ฌ์ฉ
# ์ ์ธ ๊ท์น
ํด๋์ค์ public ์์ญ์ ์ ์ธํด์ผ ํ๋ค.
๊ฐ์ ํจ์๋ static์ผ ์ ์๋ค.
์คํ์๊ฐ ๋คํ์ฑ์ ์ป๊ธฐ ์ํด, ๊ธฐ๋ณธ ํด๋์ค์ ํฌ์ธํฐ ๋๋ ์ฐธ์กฐ๋ฅผ ํตํด ์ ๊ทผํด์ผ ํ๋ค.
๊ฐ์ ํจ์๋ ๋ฐํํ๊ณผ ๋งค๊ฐ๋ณ์๊ฐ ์์ ํด๋์ค์์๋ ์ผ์นํด์ผ ํ๋ค.
class parent {
public :
virtual void v_print() {
cout << "parent" << "\n";
}
void print() {
cout << "parent" << "\n";
}
};
class child : public parent {
public :
void v_print() {
cout << "child" << "\n";
}
void print() {
cout << "child" << "\n";
}
};
int main() {
parent* p;
child c;
p = &c;
p->v_print();
p->print();
return 0;
}
[์ถ๋ ฅ ๊ฒฐ๊ณผ]
child
parent
parent ํด๋์ค๋ฅผ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ p๋ฅผ ์ ์ธํ๊ณ child ํด๋์ค์ ๊ฐ์ฒด c๋ฅผ ์ ์ธํ ์ํ
ํฌ์ธํฐ p๊ฐ c ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํค๊ณ ์์ (๋ชธ์ฒด๋ parent ํด๋์ค์ง๋ง, ํ์ฌ ์ค์ ๊ฐ์ฒด๋ child ํด๋์ค)
ํฌ์ธํฐ p๋ฅผ ํ์ฉํด virtual
์ ํ์ฉํ ๊ฐ์ ํจ์์ธ v_print()
์ ์ค๋ฒ๋ผ์ด๋ฉ๋ ํจ์ print()
์ ์ถ๋ ฅ์ ๋ค๋ฅด๊ฒ ๋์ค๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
๊ฐ์ ํจ์๋ ์คํ์๊ฐ์ ๊ฐ์ด ๊ฒฐ์ ๋จ (ํ๊ธฐ ๋ฐ์ธ๋ฉ)
print()๋ ์ปดํ์ผ ์๊ฐ์ ์ด๋ฏธ ๊ฒฐ์ ๋์ด parent๊ฐ ํธ์ถ๋๋ ๊ฒ์ผ๋ก ๊ฒฐ์ ์ด ๋๋จ